package Array;

/**
 * 滑动窗口解决长度最小子数组问题【用快指针遍历数组】
 *  快指针一直向后遍历数组，直到区间中数字的总和 >= 目标值，
 *  则启动慢指针移动，尝试缩小快慢指针之间的区间，并进行记录
 */
public class p209 {
    class Solution {
        public int minSubArrayLen(int target, int[] nums) {
            int slowIndex = 0;
            int sum = 0;
            int ans = 1000001;
            int gap;
            for(int fastIndex = 0; fastIndex < nums.length; fastIndex++){
                sum += nums[fastIndex];
                while(sum >= target){
                    gap = fastIndex - slowIndex + 1;
                    ans = Math.min(gap, ans);
                    sum -= nums[slowIndex++];
                }
            }
            return ans == 1000001 ? 0 : ans;
        }
    }
}
